#! /usr/bin/env python
# -*- encoding: utf-8 -*-

'''
Título: Test Save Image Camera (test_SaveImage.py)
Programdor: Agustín Fernández-Pacheco Román
Fecha: 17/05/2013

Código en Python que almacena capturas de imagen desde una 
webcam y las almacena en una carpeta (./imagenes)

Al usuario se le pedirá por pantalla el número de capturas que
se desea almacenar y el nombre del fichero que se le dará  a las
imagenes. Por ejemplo:

    "img01.jpg
    "img02.jpg
    "img03.jpg
    ...
'''

import sys
import os
import cv

if __name__ == '__main__':

    ##################################################################
    # Se establece comunicación con la webcam
    # Los valores habituales son: 0, 1
    ##################################################################
    capture = cv.CaptureFromCAM(0)                  # Camara 0
    if not capture:                                 # Control errores
        print "Error al inicializar WebCam"         # Mensaje de error
        del(capture)                                # Cierre conexión 
        sys.exit(1)                                 # Salir aplicacion
    cv.NamedWindow("WebCam", cv.CV_WINDOW_AUTOSIZE) # Ventana
    ##################################################################
    
    namefolder = raw_input("Nombre de la carpeta: ")
    namefile = raw_input("Nombre de inicio de los ficheros: ")
    print ("Pulse la barra espaciadora para realizar una captura")
    print ("...empezamos")

    # Incializciones
    i = 0
    os.mkdir(namefolder)

    path = "./"+namefolder+"/"+namefile

    while True:

        ####################################################
        # Se captura un frame y se muestra
        ####################################################
        frame = cv.QueryFrame(capture)  # Captura frame
        if frame is None:               # Control de errores
            print "Error captura frame" # Mensaje de error
            break                       # Salir del WHILE
        cv.ShowImage("WebCam", frame)   # Muestra frame
        ####################################################

        tecla = cv.WaitKey(10)

        # Se espera la tecla BARRA ESPACIADORA para tomar una captura
        if tecla == 32:
            i = i+1
            if i<10:
                cv.SaveImage(path+"0"+str(i)+".jpg", frame)
                print "."+namefolder+"/"+namefile+"0"+str(i)+".jpg"
            else:
                cv.SaveImage(path+str(i)+".jpg", frame)
                print "."+namefolder+"/"+namefile+str(i)+".jpg"
            
        # Se espera a la tecla ESC para salir del ciclo while
        if tecla == 27:	# Tecla ESC código ASCII
            break

    # Salir   
    del(capture)            # Se cierra la conexión con la cámara    
    cv.DestroyAllWindows()  # Se cierra la ventana
